asp.net导入excel文件到sqlserver数据库,采用事务方式,并且注释完全。
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.OleDb;using System.IO;using System.Data.SqlClient;using System.Configuration;using System.Collections;namespace ExcelImport{ public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { } ArrayList sqlList = new ArrayList(); /// <summary> /// 连接字符串 /// </summary> public static readonly string connectionString = ConfigurationManager.ConnectionStrings["CRRCDB"].ConnectionString; #region 问题:未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序 // 解决访问Excel数据源时出现 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序 // 1、确保安装了Microsoft.ACE.OLEDB.12.0驱动 // http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe // 2、在vs中右击项目--》属性--》生成 下的 目标平台 改为x86 // 如果以上两个方法还是不行的话,用第三个方法 // 3、在对应的 IIS 应用程序池中,“设置应用程序池默认属性”右击/“高级设置”/"启用32位应用程序",设置为 true。 #endregion public System.Data.DataTable GetExcelDatatable(string fileUrl) { //支持.xls和.xlsx,即包括office2010等版本的 HDR=Yes代表第一行是标题,不是数据; string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; System.Data.DataTable dt = null; //建立连接 OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl)); try { //打开连接 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) { conn.Open(); } System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string strSql = "select * from [Sheet1$]"; OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; return dt; } catch (Exception exc) { throw exc; } finally { conn.Close(); conn.Dispose(); } } /// <summary> /// 用事务机制执行多条不带参数的SQL语句。 /// </summary> /// <param name="sqlStringList">不带参数的SQL语句集合。</param> public void ExecuteTransaction(ArrayList sqlStringList) { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CRRCDB"].ConnectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; SqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < sqlStringList.Count; n ) { string strsql = sqlStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch (System.Data.SqlClient.SqlException e) { tx.Rollback(); throw new Exception(e.Message); } } } protected void Button1_Click(object sender, EventArgs e) { try { if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件 { Response.Write("<script>alert('请您选择Excel文件')</script> "); return;//当无文件时,返回 } string IsXls = Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名 if (IsXls != ".xlsx" && IsXls != ".xls") { Response.Write("<script>alert('只可以选择Excel文件')</script>"); return;//当选择的不是Excel文件时,返回 } string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数 string savePath = Server.MapPath(("uploadfiles\\") filename);//Server.MapPath 获得虚拟服务器相对路径 DataTable ds = new DataTable(); FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上 ds = GetExcelDatatable(savePath); //调用自定义方法 DataRow[] dr = ds.Select(); //定义一个DataRow数组 int rowsnum = ds.Rows.Count; int successly = 0; if (rowsnum == 0) { Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示 } else { string _Result = ""; for (int i = 0; i < dr.Length; i ) { //前面除了你需要在建立一个“upfiles”的文件夹外,其他的都不用管了,你只需要通过下面的方式获取Excel的值,然后再将这些值用你的方式去插入到数据库里面 int title = Convert.ToInt32(dr[i]["标题"]); string linkurl = dr[i]["链接地址"].ToString(); string categoryname = dr[i]["分类"].ToString(); string customername = dr[i]["内容摘要"].ToString(); try { var uuid = Guid.NewGuid().ToString(); string sql = string.Format("insert into dbo.ANDONGXIANGMU(lastUser,XMMC,PAIXU,XS) values ('{0}','{1}','{2}','{3}')", title, linkurl, categoryname, customername); sqlList.Add(sql); } catch (Exception ex) { _Result = _Result ex.InnerException "\\n\\r"; } } ExecuteTransaction(sqlList); string strmsg = "Excle表导入成功!"; System.Web.HttpContext.Current.Response.Write("<Script Language='JavaScript'>window.alert('" strmsg "');</script>"); } } catch (Exception ex) { System.Web.HttpContext.Current.Response.Write("<Script Language='JavaScript'>window.alert('" ex.Message "');</script>"); } } }}
评论